StupidBeauty
Read times:1671Posted at: - no title specified

Qt5.3文档翻译:QPointer类,QPointer Class

QPointer 类是一个模板类,提供 了指向 QObject 的受保护的指 详情……

头文件:

#include <QPointer>

qmake:

QT += core

详细说明

QPointer 类是一个模板类,提供 了指向 QObject 的受保护的指

一个受保护的指针, QPointer<T> ,其行为与普通的C++指针 T * 类似, 不同之处就在于, 当它所引用的对象被删除时,会将自己自动设置为 0( 不像 普通的 C++指针 在这种情况下会成为“迷途指针” ) T 必须 QObject 的子类。

受保护的指针,可用来储存一个被别人所拥有的 QObject 的指针, 在妳仍然引用该对象时,对象可能会被删除。 妳可以安全地对该指针进行测试,以检查其有效性。

注意,在Qt 5中,对于QPointer 的行为,引入了一个小小的变化。

  • •. 在使用QPointer 来引用 QWidget (或者 QWidget 的子类 )的情况下,在之前的版本中,该QPointer 会被该 QWidget 的析构函数所清空。如今, QPointer 会由 QObject 的析构函数清空 (因为 这也是 QWeakPointers 的清空时机 ) 。任何 一个用来跟踪某个部件的QPointer, QWidget 析构函数销毁掉该部件的子代对象之前,都 不会 被清空。

Qt 还提供了 QSharedPointer ,这是一种带引用计数的共享指针对象, 可用来维护指向同一个指针的多个引用。

示例:

QPointer < QLabel > label = new QLabel ;

label->setText("&Status:");

...

if (label)

label->show();

如果 在这 过程中,该 QLabel 被删除了,则,此处 label 变量 的值会是 0 ,而不是一个无效的地址,于是最后 一行就不会被执行。

QPointer 所提供的函数和操作符与普通未保护的指针相同, 例外之处就是指针的算术操作符 ( + - ++ -- ) 这些操作符一般在指向对象数组时使用。

如果只是准备将QPointers当作普通的指针来用,那么,妳无需阅读这个类的文档。

要想创建被保护的指针,则, 妳可以从一个T*或者相同类型的另一个被保护的指针来构造或者赋值来得到它们 妳可以使用operator==()和operator!=()来对它们进行比较,或者使用 isNull ()来测试它们是否为 0 妳可以使用 *x x->member 标记来对它们进行解引用。

一个被保护的指针会自动转换成 T  * ,所以 妳可以随心所欲地混用被保护的和未保护的指针。 这就意味着,如果 妳有一个 QPointer< QWidget > ,那么,妳可以将它传递给一个要求 QWidget  *类型参数的函数。出于 这个原因, 声明 一个 以 QPointer 为参数的函数是没有意义的;只管使用普通 的指针就行了。如果 妳需要长期储存某个指针的话,则使用QPointer 吧。

注意 ,类 T 必须继承 QObject ,否则 将产生一个编译或链接错误。

参考 QSharedPointer QObject QObjectCleanupHandler

成员函数文档

T * QPointer::data() const

返回正在被保护的对象的指针。

此函数是从Qt 4.4 开始引入的。

Your opinions

Your name:Email:Website url:Opinion content:
- no title specified

HxLauncher: Launch Android applications by voice commands